From 8440ac29c7dcbef992039678ecc0fabff2fd04ec Mon Sep 17 00:00:00 2001 From: dujinkim Date: Mon, 1 Dec 2025 00:58:23 +0000 Subject: (대표님) S-EDP 관련 대표님 작업사항 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../[packageCode]/eng/[formCode]/page.tsx | 95 ++++++++++++++++++++++ .../[packageCode]/im/[formCode]/page.tsx | 95 ++++++++++++++++++++++ .../[projectCode]/[packageCode]/page.tsx | 37 +++++++++ .../(partners)/vendor-data-plant/layout.tsx | 18 +--- 4 files changed, 231 insertions(+), 14 deletions(-) create mode 100644 app/[lng]/partners/(partners)/vendor-data-plant/[projectCode]/[packageCode]/eng/[formCode]/page.tsx create mode 100644 app/[lng]/partners/(partners)/vendor-data-plant/[projectCode]/[packageCode]/im/[formCode]/page.tsx create mode 100644 app/[lng]/partners/(partners)/vendor-data-plant/[projectCode]/[packageCode]/page.tsx (limited to 'app/[lng]') diff --git a/app/[lng]/partners/(partners)/vendor-data-plant/[projectCode]/[packageCode]/eng/[formCode]/page.tsx b/app/[lng]/partners/(partners)/vendor-data-plant/[projectCode]/[packageCode]/eng/[formCode]/page.tsx new file mode 100644 index 00000000..351fbca3 --- /dev/null +++ b/app/[lng]/partners/(partners)/vendor-data-plant/[projectCode]/[packageCode]/eng/[formCode]/page.tsx @@ -0,0 +1,95 @@ +// app/[lng]/partners/vendor-data-plant/[projectCode]/[packageCode]/eng/[formCode]/page.tsx +import DynamicTable from "@/components/form-data-plant/form-data-table"; +import { getFormData, getFormId,getProjectIdByCode } from "@/lib/forms-plant/services"; +import { useTranslation } from "@/i18n"; +import { Skeleton } from "@/components/ui/skeleton"; + +interface EngineeringFormPageProps { + params: { + lng: string; + projectCode: string; + packageCode: string; + formCode: string; + }; + searchParams?: { + mode?: string; + }; +} + +export default async function EngineeringFormPage({ + params, + searchParams, +}: EngineeringFormPageProps) { + // 1) 구조 분해 할당 + const resolvedParams = await params; + + // 2) searchParams도 await 필요 + const resolvedSearchParams = await searchParams; + + // 3) 구조 분해 할당 + const { lng, projectCode, packageCode, formCode } = resolvedParams; + + // i18n 설정 + const { t } = await useTranslation(lng, 'engineering'); + + // URL 쿼리 파라미터에서 mode 가져오기 (await 해서 사용) + const mode = "ENG"; // 기본값은 IM + + // 4) DB 조회 - projectCode와 packageCode를 전달 + const { columns, data, editableFieldsMap } = await getFormData( + formCode, + projectCode, + packageCode + ); + + // 5) formId 조회 - projectCode와 packageCode를 전달 + const { formId } = await getFormId(projectCode, packageCode, formCode, mode); + + const projectId = await getProjectIdByCode(projectCode) + + // 6) 예외 처리 + if (!columns) { + return ( +

+ {t('errors.form_meta_not_found')} +

+ ); + } + + // 7) 렌더링 + return ( +
+
+
+

Engineering Form

+

+ Project: {projectCode} / Package: {packageCode} / Form: {formCode} +

+
+
+ +
+ +
+
+ ); +} + +function TableSkeleton() { + return ( +
+ + +
+ ); +} \ No newline at end of file diff --git a/app/[lng]/partners/(partners)/vendor-data-plant/[projectCode]/[packageCode]/im/[formCode]/page.tsx b/app/[lng]/partners/(partners)/vendor-data-plant/[projectCode]/[packageCode]/im/[formCode]/page.tsx new file mode 100644 index 00000000..29188061 --- /dev/null +++ b/app/[lng]/partners/(partners)/vendor-data-plant/[projectCode]/[packageCode]/im/[formCode]/page.tsx @@ -0,0 +1,95 @@ +// app/[lng]/partners/vendor-data-plant/[projectCode]/[packageCode]/eng/[formCode]/page.tsx +import DynamicTable from "@/components/form-data-plant/form-data-table"; +import { getFormData, getFormId, getProjectIdByCode } from "@/lib/forms-plant/services"; +import { useTranslation } from "@/i18n"; +import { Skeleton } from "@/components/ui/skeleton"; + +interface EngineeringFormPageProps { + params: { + lng: string; + projectCode: string; + packageCode: string; + formCode: string; + }; + searchParams?: { + mode?: string; + }; +} + +export default async function IMFormPage({ + params, + searchParams, +}: EngineeringFormPageProps) { + // 1) 구조 분해 할당 + const resolvedParams = await params; + + // 2) searchParams도 await 필요 + const resolvedSearchParams = await searchParams; + + // 3) 구조 분해 할당 + const { lng, projectCode, packageCode, formCode } = resolvedParams; + + // i18n 설정 + const { t } = await useTranslation(lng, 'engineering'); + + // URL 쿼리 파라미터에서 mode 가져오기 (await 해서 사용) + const mode = "IM"; // 기본값은 IM + + // 4) DB 조회 - projectCode와 packageCode를 전달 + const { columns, data, editableFieldsMap } = await getFormData( + formCode, + projectCode, + packageCode + ); + + // 5) formId 조회 - projectCode와 packageCode를 전달 + const { formId } = await getFormId(projectCode, packageCode, formCode, mode); + + const projectId = await getProjectIdByCode(projectCode) + + // 6) 예외 처리 + if (!columns) { + return ( +

+ {t('errors.form_meta_not_found')} +

+ ); + } + + // 7) 렌더링 + return ( +
+
+
+

Engineering Form

+

+ Project: {projectCode} / Package: {packageCode} / Form: {formCode} +

+
+
+ +
+ +
+
+ ); +} + +function TableSkeleton() { + return ( +
+ + +
+ ); +} \ No newline at end of file diff --git a/app/[lng]/partners/(partners)/vendor-data-plant/[projectCode]/[packageCode]/page.tsx b/app/[lng]/partners/(partners)/vendor-data-plant/[projectCode]/[packageCode]/page.tsx new file mode 100644 index 00000000..4904a8ff --- /dev/null +++ b/app/[lng]/partners/(partners)/vendor-data-plant/[projectCode]/[packageCode]/page.tsx @@ -0,0 +1,37 @@ +// app/[lng]/partners/vendor-data-plant/[projectCode]/[packageCode]/page.tsx + +import { TagsTable } from "@/lib/tags-plant/table/tag-table" + +interface MasterTagListPageProps { + params: Promise<{ + lng: string + projectCode: string + packageCode: string + }> +} + +export default async function MasterTagListPage({ + params, +}: MasterTagListPageProps) { + const { projectCode, packageCode } = await params + + return ( +
+
+
+

Master Tag List

+

+ Project: {projectCode} / Package: {packageCode} +

+
+
+ + {/* 완전 클라이언트 컴포넌트 */} + +
+ ) +} \ No newline at end of file diff --git a/app/[lng]/partners/(partners)/vendor-data-plant/layout.tsx b/app/[lng]/partners/(partners)/vendor-data-plant/layout.tsx index 8a9c43e9..792a3a6a 100644 --- a/app/[lng]/partners/(partners)/vendor-data-plant/layout.tsx +++ b/app/[lng]/partners/(partners)/vendor-data-plant/layout.tsx @@ -2,41 +2,35 @@ import * as React from "react" import { cookies } from "next/headers" import { Shell } from "@/components/shell" -import { getVendorProjectsAndContracts } from "@/lib/vendor-data-plant/services" import { VendorDataContainer } from "@/components/vendor-data-plant/vendor-data-container" import { authOptions } from "@/app/api/auth/[...nextauth]/route" import { getServerSession } from "next-auth" import { InformationButton } from "@/components/information/information-button" import { useTranslation } from "@/i18n" +import { getVendorProjectsWithPackages } from "@/lib/vendor-data/services" interface VendorDataLayoutProps { children: React.ReactNode params: { lng?: string } } -// Layout 컴포넌트는 서버 컴포넌트입니다 export default async function VendorDataLayout({ children, params, }: VendorDataLayoutProps) { - // 기본 언어는 'ko'로 설정, params.locale이 있으면 사용 - const { lng } = await params; + const { lng } = await params const language = lng || 'en' const { t } = await useTranslation(language, 'engineering') const session = await getServerSession(authOptions) const vendorId = session?.user.companyId - // const vendorId = "17" const idAsNumber = Number(vendorId) - // 프로젝트 데이터 가져오기 (type=plant만) - const projects = await getVendorProjectsAndContracts(idAsNumber, "plant") + // 프로젝트 및 패키지 데이터 가져오기 + const projects = await getVendorProjectsWithPackages(idAsNumber, "plant") // 레이아웃 설정 쿠키 가져오기 - // Next.js 15에서는 cookies()가 Promise를 반환하므로 await 사용 const cookieStore = await cookies() - - // 이제 cookieStore.get() 메서드 사용 가능 const layout = cookieStore.get("react-resizable-panels:layout:mail") const collapsed = cookieStore.get("react-resizable-panels:collapsed") @@ -54,9 +48,6 @@ export default async function VendorDataLayout({ - {/*

- 각종 Data 입력할 수 있습니다 -

*/} @@ -74,7 +65,6 @@ export default async function VendorDataLayout({ defaultCollapsed={defaultCollapsed} navCollapsedSize={4} > - {/* 페이지별 콘텐츠가 여기에 들어갑니다 */} {children} )} -- cgit v1.2.3